package com.budwk.app.sys.commons.constant;

import cn.dev33.satoken.stp.StpUtil;
import com.budwk.app.sys.models.Sys_unit;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.services.SysUnitService;
import com.budwk.app.sys.services.SysUserService;
import com.budwk.starter.common.constant.GlobalConstant;
import com.budwk.starter.security.utils.SecurityUtil;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Strings;

/**
 * 数据权限配置工具类
 */
@IocBean
public class DataAuthUtilService {
    @Inject
    private SysUserService sysUserService;
    @Inject
    private SysUnitService sysUnitService;

    public final String NO_DATA_AUTH = "-1";

    /**
     * 获取当前用户查看范围权限
     * @return 当前用户查看范围unitpath
     */
    public String getDataAuthPath() {
        //如果是超级管理员
        if (StpUtil.hasRole(GlobalConstant.DEFAULT_SYSADMIN_ROLECODE)) {
            return "";
        }
        //可以查看所有
        if (StpUtil.hasPermission(GlobalRoleConstant.DATA_AUTH_SCOPE_ALL)) {
            return "";
        }
        //可以查看本单位 主要针对 OA用户
        if (StpUtil.hasPermission(GlobalRoleConstant.DATA_AUTH_SCOPE_UNIT)) {
            Sys_user user = sysUserService.getUserById(SecurityUtil.getUserId());
            String unitId = Strings.sNull(user.getOrgAccountId(),user.getUnitId());
            Sys_unit unit = sysUnitService.fetch(unitId);
            return unit.getPath();
        }
        //可以查看本部门、处室
        if (StpUtil.hasPermission(GlobalRoleConstant.DATA_AUTH_SCOPE_DEPARTMENT)) {
            return SecurityUtil.getUnitPath();
        }
        //都没有 则查看本人
        return NO_DATA_AUTH;
    }
}
